let $my = null;
(function (a) {
    'use strict';
    var _m = /\S+/g;
    var document = a.document,
        readyks = false,
        readyis = null,
        DOMContentLoaded = function () {
            if (document.addEventListener) {
                document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);
                readyks = true;
                $.ready();
            } else if (document.readyState === 'complete') {
                document.detachEvent('onreadystatechange', DOMContentLoaded);
                readyks = true;
                $.ready();
            }
        },
        cl = !!document.documentElement.classList,
        evt = document.createEvent ? 'target' : 'srcElement',
        $ = function (selector, context) {
            return new $.fn.Init(selector, context);
        };
    $.fn = $.prototype = {
        Init: function (selector, context) {
            if (typeof (selector) === 'function') {
                return $.ready(selector);
            } else if (typeof (selector) === 'string') {
                var temp = sele(selector, context);
                var tempI = 0;
                for (tempI;tempI < temp.length;tempI++) {
                    this[tempI] = temp[tempI];
                }
                this.length = temp.length;
                return this;
            } else {
                if (selector.length) {
                    for (var i = 0;i < selector.length;i++) {
                        this[i] = selector[i];
                    }
                    this.length = selector.length;
                } else {
                    this[0] = selector;
                    this.length = 1;
                }
                return this;
            }
        },
        get: function (n) {
            return n > this.length ? null : this[n];
        },
        find: function (s) {
            return $(s, this);
        },
        first: function () {
            return $(this[0]);
        },
        last: function () {
            return $(this[this.length - 1]);
        },
        eq: function (n) {
            return n > this.length ? null : $(this[n]);
        },
        next: function () {
            return rtArr(this, function (d) {
                return $.s_e(d, 'nextSibling');
            });
        },
        prev: function () {
            return rtArr(this, function (d) {
                return $.s_e(d, 'previousSibling');
            });
        },
        siblings: function () {
            return rtArr(this, function (d) {
                return $.sibling((d.parentNode || {}).firstChild, d);
            });
        },
        children: function () {
            return rtArr(this, function (d) {
                return $.sibling((d || {}).firstChild);
            });
        },
        parent: function () {
            return rtArr(this, function (d) {
                if (d.parentNode && d.parentNode.nodeType !== 11) {
                    return d.parentNode;
                }
            });
        },
        hasClass: function (c) {
            c = $.trim(c).split(' ');
            var t = this[0],
                cks = true;
            if (c) {
                if (cl) {
                    $.each(c, function () {
                        if (!t.classList.contains(this)) {
                            cks = false;
                        }
                    });
                } else {
                    $.each(function () {
                        var tC = ' ' + t.className + ' ';
                        var nC = ' ' + this + ' ';
                        if (tC.search(nC) === -1) {
                            cks = false;
                        }
                    });
                }
                return cks;
            } else {
                return typeof (this[0].className) === 'string';
            }
        },
        attr: function (a, b) {
            return obs(function (a, b) {
                this.setAttribute(a, b);
            }, function (a) {
                return this[0].getAttribute(a);
            }, this, a, b);
        },
        prop: function (a, b) {
            return obs(function (a, b) {
                if (a === 'class') {
                    a = 'className';
                }
                this[a] = b;
            }, function (a) {
                return this[0][a];
            }, this, a, b);
        },
        addClass: function (c) {
            c = $.trim(c).split(' ');
            if (cl) {
                this.each(function () {
                    var that = this;
                    $.each(c, function () {
                        that.classList.add(this);
                    });
                });
            } else {
                this.each(function () {
                    var add = this.className;
                    var ks = false;
                    for (var s = 0;s < c.length;s++) {
                        var nC = ' ' + this.className + ' ';
                        var cs = ' ' + c[s] + ' ';
                        if (nC.search(cs) === -1) {
                            ks = true;
                            add += cs;
                        }
                    }
                    if (ks) {
                        this.className = $.trim(add);
                    }
                });
            }
            return this;
        },
        removeClass: function (c) {
            c = $.trim(c).split(' ');
            if (cl) {
                this.each(function () {
                    var that = this;
                    $.each(c, function () {
                        that.classList.remove(this);
                    });
                });
            } else {
                this.each(function () {
                    for (var s = 0;s < c.length;s++) {
                        var nC = ' ' + this.className + ' ';
                        this.className = $.trim(nC.replace(new RegExp(' ' + c[s] + ' ', 'g'), ' '));
                    }
                });
            }
            return this;
        },
        css: function (a, b) {
            b = Number(b) ? b += 'px' : b;
            return obs(function (a, b) {
                this.style[$.cssPrefix(a)] = b;
            }, function (a) {
                return cssget(this[0], a);
            }, this, a, b);
        },
        val: function () {
            return this[0].value;
        },
        html: function (c) {
            if (c) {
                this.each(function () {
                    this.innerHTML = c;
                });
                return this;
            } else {
                return this[0].innerHTML;
            }
        },
        text: function (c) {
            var s = typeof (this[0].textContent) === 'string' ? 'textContent' : 'innerText';
            if (c) {
                this.each(function () {
                    this[s] = c;
                });
                return this;
            } else {
                return this[0][s];
            }
        },
        size: function () {
            return this.length;
        },
        append: function (c) {
            return creatEmt(this, c, function (a, b) {
                a.appendChild(b);
            });
        },
        prepend: function (c) {
            return creatEmt(this, c, function (a, b, c) {
                a.insertBefore(b, c);
            }, 'firstChild');
        },
        after: function (c) {
            return creatEmt(this, c, function (a, b, c) {
                if (c) {
                    a.parentNode.insertBefore(b, c);
                } else {
                    a.parentNode.appendChild(b);
                }
            }, 'nextSibling');
        },
        before: function (c) {
            return creatEmt(this, c, function (a, b) {
                a.parentNode.insertBefore(b, a);
            });
        },
        height: function (h) {
            return h ? this.css('height', h) : cssget(this[0], 'height');
        },
        width: function (w) {
            return w ? this.css('width', w) : cssget(this[0], 'width');
        },
        // 谁使用on事件就绑在谁身上，别的都 是用冒泡实现，解绑事件只能解绑直接绑定事件的元素,且不是匿名函数。
        on: function (eType, s, func) {
            if (typeof (s) !== 'string') {
                this.each(function () {
                    addevent(eType, this, s);
                });
            } else {
                this.each(function () {
                    var that = this;
                    addevent(eType, that, function (e) {
                        $(s, $(that)).each(function () {
                            var eN = e[evt],
                                wKs = true;
                            while (wKs) {
                                if (this === eN) {
                                    wKs = false;
                                    func.call(eN, e);
                                    return false;
                                } else if (that === eN) {
                                    wKs = false;
                                }
                                eN = eN.parentNode;
                            }
                        });
                    });
                });
            }
            return this;
        },
        off: function (a, b) {
            this.each(function () {
                remevent(this, a, b);
            });
            return this;
        },
        trigger: function (t) {
            this.each(function () {
                triant(t, this);
            });
            return this;
        },
        each: function (callback, args) {
            return $.each(this, callback, args);
        },
        splice: [].splice // 生成伪数组用。

    };
    $.fn.Init.prototype = $.fn;
    $.ready = function (obj) {
        if (obj && typeof (obj) === 'function') {
            readyis = obj;
        }
        if (!readyks) {
            if (document.readyState === 'complete') {
                $.ready();
            } else if (document.addEventListener) {
                document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
                window.addEventListener('load', $.ready, false);
            } else {
                document.attachEvent('onreadystatechange', DOMContentLoaded);
                window.attachEvent('onload', $.ready);
            }
        } else {
            if (readyis) {
                readyis();
                readyis = false;
            }
        }
    };
    /** **************class选择器相关函数 start*****************/

    function sele (s, t) {
        var dom = t || [document];
        var ns = s.match(_m);
        for (var i = 0;i < ns.length;i++) {
            dom = splitsele(ns[i], dom);
        }
        return dom;
    }

    function splitsele (s, dom) {
        var k = [];
        var as = s.slice(0, 1);
        if (as === '#') {
            k = getdom(s, dom, function () {
                return [document.getElementById(s.slice(1))];
            });
        } else if (as === '.') {
            k = getdom(s, dom, function (a, b) {
                return cla(a, b);
            });
        } else {
            k = getdom(s, dom, function (a, b) {
                var dom = [];
                for (var i = 0;i < b.length;i++) {
                    putarry(dom, b[i].getElementsByTagName(a));
                }
                return dom;
            });
        }
        return k;
    }

    function matchs (s) {
        return /[#.>~+\[:]/.test(s);
    }

    function getdom (s, d, f) {
        var k = null;
        if (matchs(s.slice(1))) {
            k = querys(s, d);
        } else {
            k = f(s, d);
        }
        return k;
    }

    function cla (s, d) {
        var dom = [];
        var set = document.getElementsByClassName ? (s = s.slice(1), 'getElementsByClassName') : 'querySelectorAll';
        for (var i = 0;i < d.length;i++) {
            putarry(dom, d[i][set](s));
        }
        return dom;
    }

    function querys (s, dom) {
        var k = [];
        for (var i = 0;i < dom.length;i++) {
            putarry(k, dom[i].querySelectorAll(s));
        }
        return k;
    }

    function putarry (arr, dom) {
        for (var i = 0;i < dom.length;i++) {
            arr.push(dom[i]);
        }
    }

    // 事件绑定

    function addevent (e, a, b) {
        if (window.addEventListener) {
            a.addEventListener(e, b, false);
        } else {
            a.attachEvent('on' + e, b);
        }
    }
    // 事件移除

    function remevent (e, a, b) {
        if (e.removeEventListener) {
            e.removeEventListener(a, b, false);
        } else {
            e.detachEvent('on' + a, b);
        }
    }
    // 事件创建

    function triant (e, em) {
        var evt = null;
        if (document.createEvent) {
            evt = document.createEvent('Event');
            evt.InitEvent(e, true, true);
            em.dispatchEvent(evt);
        } else {
            evt = document.createEventObject();
            evt.screenX = 100;
            evt.screenY = 0;
            evt.clientX = 0;
            evt.clientY = 0;
            evt.ctrlKey = false;
            evt.altKey = false;
            evt.shiftKey = false;
            evt.button = 0;
            em.fireEvent('on' + e, evt);
        }
    }
    // 创建节点助手

    function creatEmt (t, s, func, attr) {
        var d = document.createElement('div');
        d.innerHTML = s;
        var e = d.childNodes,
            n = e.length,
            fe;
        t.each(function () {
            fe = attr ? this[attr] : null;
            for (var i = 0;i < n;i++) {
                func.call(t, this, e[0], fe);
            }
        });
        return t;
    }
    // 遍历助手，遍历第一个参数，第次调用传入的函数，把结果封装成$对像返回

    function rtArr (d, func) {
        var rArr = [];
        d.each(function () {
            var k = func.call(this, this);
            if (k) {
                if ($.isArray(k)) {
                    putarry(rArr, k);
                } else {
                    rArr.push(k);
                }
            }
        });
        return $(rArr);
    }
    // 参数判断助手，判断是传入一个JSON对像还是两个字符串参数对应的作处理。

    function obs (func1, func2, a, b, c) {
        if (c) {
            a.each(function () {
                func1.call(this, b, c);
            });
            return a;
        } else {
            if (typeof (b) === 'string') {
                return func2.call(a, b);
            } else {
                a.each(function () {
                    for (var i in b) {
                        func1.call(this, i, b[i]);
                    }
                });
                return a;
            }
        }
    }
    // 得到CSS属性值

    function cssget (e, str) {
        return window.getComputedStyle ? window.getComputedStyle(e, null).getPropertyValue(str) : e.currentStyle.getAttribute(str);
    }
    // css属性助手，把传入的CSS属性转成可挂在style上的的属性，在适当情况下增加私有前辍
    $.cssPrefix = function (style) {
        var htmlStyle = document.documentElement.style;
        if (style === 'float') {
            return 'cssFloat' in htmlStyle ? 'cssFloat' : 'styleFloat';
        }
        var prefix = ['Webkit', 'Moz', 'ms', 'O'],
            i, humpString = [],
            _toHumb = function (string) {
                return string.replace(/-(\w)/g, function ($0, $1) {
                    return $1.toUpperCase();
                });
            };
        for (i in prefix) {
            humpString.push(_toHumb(prefix[i] + '-' + style));
        }
        humpString.push(_toHumb(style));
        for (i in humpString) {
            if (humpString[i] in htmlStyle) {
                return humpString[i];
            }
        }
        return style;
    };
    // 找到元素节点
    $.s_e = function (n, s) {
        n = n[s];
        for (; n;n = n[s]) {
            if (n.nodeType === 1) {
                return n;
            }
        }
        return false;
    };
    // 去除字符串两端空格
    $.trim = function (s) {
        return s.replace(/(^\s*)|(\s*$)/g, '');
    };
    // 合并参数
    $.extend = function (a, b) {
        for (var k in b) {
            a[k] = b[k];
        }
        return a;
    };
    $.type = function (obj) {
        return Object.prototype.toString.call(obj).split(' ')[1].toLocaleLowerCase().slice(0, -1);
    };
    $.isFunction = function (obj) {
        return $.type(obj) === 'function';
    };
    $.isArray = function (obj) {
        return $.type(obj) === 'array';
    };
    $.each = function (obj, callback, args) {
        var value, i = 0,
            length = obj.length,
            isArray = typeof (length) === 'number';
        if (args) {
            if (isArray) {
                for (; i < length;i++) {
                    value = callback.apply(obj[i], args);
                    if (value === false) {
                        break;
                    }
                }
            } else {
                for (i in obj) {
                    value = callback.apply(obj[i], args);
                    if (value === false) {
                        break;
                    }
                }
            }
        } else {
            if (isArray) {
                for (; i < length;i++) {
                    value = callback.call(obj[i], i, obj[i]);
                    if (value === false) {
                        break;
                    }
                }
            } else {
                for (i in obj) {
                    value = callback.call(obj[i], i, obj[i]);
                    if (value === false) {
                        break;
                    }
                }
            }
        }
        return obj;
    };
    $.sibling = function (n, elem) {
        var r = [];
        for (; n;n = n.nextSibling) {
            if (n.nodeType === 1 && n !== elem) {
                r.push(n);
            }
        }
        return r;
    };
    // 深度拷贝函数
    $.deepCopy = function (data) {
        var t = $.type(data),
            o,
            i,
            ni;
        if (t === 'array') {
            o = [];
        } else if (t === 'object') {
            o = {};
        } else {
            return data;
        }
        if (t === 'array') {
            for (i = 0, ni = data.length;i < ni;i++) {
                o.push(this.deepCopy(data[i]));
            }
            return o;
        } else if (t === 'object') {
            for (i in data) {
                o[i] = this.deepCopy(data[i]);
            }
            return o;
        }
    };

    $.ChangeVal = function () {
        var s = $;
        window.$ = null;
        return s;
    };
    window.$ = $;
    $my = $;
})(window);
export default $my;

/**
 * 功能
 * @Author: lizuping
 * @Date: 2018-05-10
 * @Last Modified by: lizuping
 * @Last Modified time: 2018-05-19 11:01:16
 */

/* 文档说明
全局变量为：$,如果怕引起冲突，可以，var ww=$.ChangeVal();来把全局变量变为ww。
常用全局函数有：
$.trim(string)//去掉字符串前后空格
$.type(obj)//得到对像类型
$.isArray(obj)//判断是否是array
$.isFunction(obj)//判断是否是函数
$.each(obj,callback,args)//遍历对像，并把参数（args(array)）传给每次的回调函数
$.ready(function(){})为文档加载完成函数，可简写成$(function(){});
$()支持常用选择器，及范围选择例如$(".cc",$("#aa")),表示查找ID为aa下的含有.cc的元素，返回自定义伪数组对像。
$.deepCopy()深拷贝对像。

自定义伪数组对像有下列常用类jquery方法
get(number)//
find(string)//
first()//得到该对像集合的首个元素
last()//得到该对像集合的最后一个元素
eq(number)//得到该对像集合的某个元素
next()//得到该对像集合中的每一个元素的前一个元素
prev()//得到该对像集合中的每一个元素的下一个元素
siblings()//得到该对像集合的每一个元素的兄弟节点
children()//得到该对像集合的每一元素的子节点
parent()//得到该对像集合的每一个元素的父节点
hasClass(s?)//判断是否有class
attr()//与jquery用法类似
prop()//与jquery用法类似
addClass()//与jquery用法类似
removeClass()//与jquery用法类似
css()//与jquery用法类似
val()//与jquery用法类似
html()//与jquery用法类似
text()//与jquery用法类似
size()//与jquery用法类似
append()//与jquery用法类似
prepend()//与jquery用法类似
after()//与jquery用法类似
before()//与jquery用法类似
height()//与jquery用法类似
width()//与jquery用法类似
on(type,string,callback)//绑定事件，最多可传三个参数，每一个为事件类型，第二个为再次查找选择器，第三个为回调函数，如果第三个参数没有，每二个参数可以是回调函数，例如$(".aa").on("click",function(){})或$(".aa").on("click",".bb",function(){})这种方式与$(".aa .bb").on("click",function(){})类似，但是这种绑定必须是已存在的，三参数绑定效率低一些但是可以绑定不存在的dom(一开始不存在，事件发生时才存在的dom);
off(type,functionName)//解绑非匿名函数，(不能解绑三参数绑定)
trigger(type)//与jquery用法类似,模拟事件
each(callback,args)//遍历对像，并把参数（args(array)）传给每次的回调函数

IE最低支持到IE8

文档说明 */
